【新機能】Amazon EC2 Spot FleetがAuto Scaling対応。より安いEC2がより使いやすく。
こんにちは、せーのです。今日はEC2の賢い買い方「Spot Fleet」の新機能をご紹介します。
Spot Fleetってなんだっけ
Spot FleetとはSpotインスタンスの買い方の一種で、条件を指定(これくらいのメモリでこれくらいの大きさのインスタンスをいくらくらいの価格で)しておくとAWSがEC2のSpotインスタンスの価格を監視、条件に合ったEC2を見つけ出して起動、逆に使いたい価格より高くなったEC2は自動的に廃棄する、といったローテーションを自動で行ってくれる機能です。これで予算枠をはみ出すことなく必要なEC2を必要なだけ用意して使うといった事ができるようになります。
今まではこのSpot Fleet、指定したキャパシティを維持するような設定しか出来ませんでしたが今回のアップデートでCloudWatchのMetric値に合わせてその数を上下させる事ができるようになりました。
ここまで連動できる
今回はEC2、ECS、SQSのMetricに連動することができるので
- ECSのCPU使用率に基づいてEC2の数を自動で上下させるアーキテクトをSpot Fleetで
- SQSのキュー数によって処理バッチの数を上下させるアーキテクトをSpot Fleetで
- Spot FleetのMaxPercentCapacityAllocation(スポットのキャパシティのうち最大のもの)をトリガーとしたSpot Fleet
- 毎秒ごとのリクエスト数やレスポンス時間を元にサーバーの数を上下させるWebサービスをSpot Fleetで
のようなことが出来るようになります。今まで一般的に行われていたCloudWatchの監視項目の値をトリガーにしてAutoScalingの数を上下させる、という仕組みをそのままSpot Fleetに置き換えてコストを抑えることが出来るわけですね。
やってみた
ではやってみましょう。まずはSpot Fleetの作成です。EC2よりスポットインスタンスを選択します。
さくさくっとSpot Fleetを設定します。今回はm3系で4つのインスタンスを維持するように設定してみます。Auto Scalingに対応させるにはリクエストタイプを「リクエストと維持」に選択しておいて下さい。
インスタンスのセキュリティグループやHDDサイズを指定して
あとは作成ボタンを押せばもう完成です。
AWSがいい感じの価格のEC2を自動入札して取ってきてくれます。
次にトリガーとなるリソースを準備します。今回はSQSのキュー数によって上下させたいと思います。SQSのキューを一つつくり
適当にメッセージを4つほど入れておきます。
次はCloudWatchのアラームを作ります。CloudWatchの画面からアラームの作成を選択します。
先ほどのSQSが設定できていれば選択対象にSQSができているのでそれを選択します。
SQSのMetricの中から「ApproximateNumberOfMessageVisible(キューから利用可能になったメッセージの数)」を選択し、それぞれ上限と下限のアラームを一つづつ作ります。今回は10個以上キューが溜まったら発動するアラームとキューが2個以下になった場合に発動するキューをそれぞれ作りました。
最後にこのアラームをSpot Fleetのトリガーに設定します。EC2のスポットインスタンスのページに戻り、先程作ったSpotFleetを選択し、下部にある[autoscaling]リンクを押下するとconfigureボタンが出てきますのでそちらを押してトリガーを設定します。10個以上キューが溜まったら台数を増やす、2個以下なら台数を減らす、という設定にします。
これで設定は完了です。SQSからメッセージをクリアしてみます。
しばらく待つとCloudWatchのアラームが発動します。
それに合わせてEC2Spotの数が減っていってるのがわかります。
どうでしょう、簡単ですね。
まとめ
いかがでしたでしょうか。今回の機能を使うとよりコストを押さえて柔軟な対応が出来るようになります。みなさんも是非計画的にEC2を使ってみてください。